//
// Created by 16933 on 2022/5/2.
//

#ifndef BALANCECAR_PID_H
#define BALANCECAR_PID_H
#include "stdint.h"

enum
{
    LAST  = 0,
    NOW   = 1,
};

/**
  * @brief     PID控制器 结构体
  */
typedef struct
{
    /* p、i、d参数 */
    float p;
    float i;
    float d;

    /* 目标值、反馈值、误差值 */
    float set;
    float get;
    float err[2];

    /* p、i、d各项计算出的输出 */
    float pout;
    float iout;
    float dout;

    /*上一次的d输出值*/
    float last_dout;

    /* pid公式计算出的总输出 */
    float out;

    /* pid最大输出限制  */
    uint32_t max_output;

    /* pid积分输出项限幅 */
    uint32_t integral_limit;

    /* 输出死区 */
    uint32_t death_space;
    /*滤波比率*/
    float filtering_rate;

} pid_t;
float pid_calc_ang(pid_t *pid, float get, float set,short gy);
void pid_init(pid_t *pid, uint32_t max_out, uint32_t intergral_limit,float kp, float ki, float kd,uint32_t death_space);
float pid_calc(pid_t *pid, float get, float set);
void pid_reset(pid_t *pid, float kp, float ki, float kd);
#endif //BALANCECAR_PID_H
